<?php

namespace action\admin;

use \cass\formulaire AS form;

class newsAction extends \cass\Action {

    /**
     * Méthode par défaut
     */
    public function init() {
	$this->forwardEven($this->getSession()->hasCredential('admin_news'), '@403');

	// Infos de la page
	$this->addToAriane('class', 'news'); // Pas de fil d'ariane sur l'admin, mais on y stocke la classe du titre
    }

    /**
     * Méthode de gestion des accès
     */
    public function execute($_page = null) {
	// Infos de la page
	$this->setTitle('Gestion des actualités');

	// Formulaire de recherche d'un utilisateur
	$formulaire = new form\Formulaire('Recherche d\'une actualité');
	$formulaire->setTemplate('_formList');
	$formulaire->setButtons('submit', 'Chercher');

	$val = 'Id ou titre';
	$formulaire->append(new form\Input($val, $val));

	$filter = null;
	$query = $this->doctrine->createQuery('SELECT n FROM News n');

	// Vérifications
	if ($formulaire->isPosted()) {}

	// Enregistrements
	if ($formulaire->isPostedWithoutError()) {
	    if ($formulaire->getValue($val) != $val) {
		$this->filter = $formulaire->getValue($val);

		$query = $this->doctrine->createQuery('SELECT n FROM News n WHERE n.title LIKE :filter OR n.id=:nofilter')
				->setParameter('filter', '%' . $this->filter . '%')
				->setParameter('nofilter', $this->filter);
	    }
	}

	$pagination = new \cass\Pagination($query);
	$pagination->setUri(\cass\Uri::create('admin', 'news'));
	$pagination->setCurrentPage($_page);
	$pagination->setNbByPage(20);
	$this->news = $pagination->getElements();
	$this->pagination = $pagination;
	$this->formulaire = $formulaire;
    }

     /**
     * Créé un profil
     */
    public function executeCreate() {
        // Infos de la page
        $this->setTitle('Création d\'une actualité');
        
        // Formulaire de création de groupe
        $formulaire = new form\Formulaire('Création d\'une actualité');
        $formulaire->setButtons('submit', 'Ajouter l\'actualité');     
        $formulaire->append(new form\Input('Titre', '', true, ''));
        $formulaire->append(new form\Editor('Contenu'));

        // Vérifications
        if ($formulaire->isPosted()) {
            
        }

        // Enregistrements
        if ($formulaire->isPostedWithoutError()) {
            $news = new \News;
            $news->setTitle($formulaire->getValue('Titre'));
            $news->setDate(new \DateTime('now'));
            $news->setContent($formulaire->getValue('Contenu'));
            $news->setUser($this->getSession()->getUser());

            $this->doctrine->persist($news);
            $this->doctrine->flush();
            $formulaire->setConfirm('L\'actualité a été ajoutée. Retournez à <a href="' . url_for('admin', 'news') . '">la gestion des actualités</a>.');
        }

        // Assignations
        $this->formulaire = $formulaire;
    }

       /**
     * Modifie une news
     * @param <integer> $_news Id de la news à modifier
     */
    public function executeEdit($_news) {
	// Infos de la page
	$this->setTitle('Modification d\'une actualité');

	// Sélection des accès
	$news = $this->doctrine->find('News', $_news);

	// Formulaire de modification
	$formulaire = new form\Formulaire('Modification d\'une actualité');
	$formulaire->setButtons('submit', 'Modifier l\'actualité');
	$formulaire->addToLinks('Retour à la gestion des actualités', url_for('admin', 'news'));	
	$formulaire->append(new form\Input('Titre', $news->getTitle(), true));
        $formulaire->append(new form\Editor('Contenu', $news->getContent(), true));

        
	// Vérifications
	if ($formulaire->isPosted()) {}

	// Enregistrements
	if ($formulaire->isPostedWithoutError()) {
	    // Met à jour l'utilisateur
	    $news->setTitle($formulaire->getValue('Titre'));
	    $news->setContent($formulaire->getValue('Contenu'));
	    $this->doctrine->flush();
	    $formulaire->setConfirm('L\'actualité a été modifiée. Retournez à <a href="' . url_for('admin', 'news') . '">la gestion des actualités</a>.');
	}

	// Assignations
	$this->formulaire = $formulaire;
    }

    /**
     * Supprime une news
     * @param <integer> $_news Id de la news à suppriemr
     */
    public function executeDelete($_news) {
	// Infos de la page
	$this->setTitle('Suppression d\'une actualité');

	// Sélection du profil de l'utilisateur
	$news = $this->doctrine->find('News', $_news);

	// Formulaire de confirmation de suppression
	$formulaire = new form\Formulaire('Suppression d\'une actualité');
	$formulaire->setButtons('submit', 'Supprimer l\'actualité');
	$formulaire->addToLinks('Retour à la gestion des actualités', url_for('admin', 'news'));
	$formulaire->append(new form\Text('Confirmez vous la suppression de l\'actualité ' . $news->getTitle() . ' ?'));

	// Vérifications
	if ($formulaire->isPosted()) {}

	// Enregistrements
	if ($formulaire->isPostedWithoutError()) {
	    $this->doctrine->remove($news);
	    $this->doctrine->flush();
	    $formulaire->setConfirm('L\'actualité a été supprimée. Retournez à <a href="' . url_for('admin', 'news') . '">la gestion des actualités</a>.');
	}

	// Assignations
	$this->formulaire = $formulaire;
    }

    /**
     * Supprime l'avatar de l'utilisateur
     * @param <integer> $_user Id de l'utilisateur
     */
    public function executeDeleteAvatar($_user) {
	// Sélection l'utilisateur et son avatar
	$user = $this->doctrine->find('User', $_user);
	$avatar = $user->getAvatar();

	// Supprime si l'avatar existe
	if (!empty($avatar) AND file_exists(__PATH__ . $avatar)) {
	    unlink(__PATH__ . $avatar);
	    $user->setAvatar(null);
	    $this->doctrine->flush();
	}

	// Redirige vers la modification de cet utilisateur
	$this->redirect('admin', 'users', 'edit', array($_user));
    }

}